home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1191 / 1191.xpi / chrome / reminderfox.jar / content / reminderfox / network / download.js next >
Text File  |  2010-01-31  |  19KB  |  484 lines

  1. var reminderFox_download_headless;
  2. var reminderFox_remoteTimeStamp;
  3. var  reminderFox_editWindowCallback;
  4. var reminderFox_subscriptionCallback;
  5. var reminderFox_subscriptionReminders;
  6.  
  7. function reminderFox_download_statustxt(aStatus, aError){
  8.     if (reminderFox_download_headless == REMINDER_FOX_UI_MODE_HEADLESS_SHOW_ALL_UI) {
  9.         document.getElementById("status").value = (aError) ? reminderFox_download_getErrorMsg(aError) : aStatus;
  10.     }
  11.     else {
  12.         var value = null;
  13.         if (aError == -1) {
  14.             value = aStatus;
  15.         }
  16.         else {
  17.             value = (aError) ? reminderFox_download_getErrorMsg(aError) : aStatus;
  18.         }
  19.         reminderFox_logMessageLevel("Download (headless): " + new Date() + " " + value, REMINDER_FOX_LOG_LEVEL_FINE);
  20.     }
  21. }
  22.  
  23. function reminderFox_download_Startup()
  24. {
  25.   reminderFox_download_headless = REMINDER_FOX_UI_MODE_HEADLESS_SHOW_ALL_UI;
  26.   reminderFox_download_statustxt(reminderFox_getBundle().getString("rf.upload.ready.label"),0);
  27.   reminderFox_editWindowCallback = null;
  28.   setTimeout(reminderFox_downloadDelayedStartup, 0);
  29.  
  30. }
  31.  
  32. function reminderFox_download_Startup_headless(headlessLevel, callback)
  33. {
  34.   reminderFox_download_headless = headlessLevel; 
  35.   reminderFox_download_statustxt(reminderFox_getBundle().getString("rf.upload.ready.label"),0);
  36.   reminderFox_editWindowCallback = callback;
  37.   reminderFox_downloadDelayedStartup();
  38. }
  39.  
  40. function reminderFox_download_Startup_headless_URL(headlessLevel, callback, url, downloadedReminders, downloadedTodos)
  41. {
  42.   reminderFox_download_headless = headlessLevel; 
  43.   reminderFox_download_statustxt(reminderFox_getBundle().getString("rf.upload.ready.label"),0);
  44.   reminderFox_subscriptionCallback = callback;
  45.  reminderFox_subscriptionReminders = downloadedReminders;
  46.  
  47.    var _ioService = Components.classes["@mozilla.org/network/io-service;1"]
  48.                       .getService(Components.interfaces.nsIIOService);
  49.  
  50.   var downloadURI = _ioService.newURI(url,null,null);
  51.   if(gDownloadService.start(downloadURI,reminderFox_downloadCallbackURL))
  52.     reminderFox_download_statustxt(reminderFox_getBundle().getString("rf.upload.request.label"),0);
  53.   else {
  54.     //statustxt(reminderFox_getBundle().getString("rf.net.done"),0);
  55.     reminderFox_downloadCallbackURL(reminderFox_getBundle().getString("rf.net.done"),-1);
  56.   }
  57. }
  58.  
  59.  
  60. function reminderFox_downloadCallbackURL(aStatus,aError)
  61. {
  62.   if(aStatus != reminderFox_getBundle().getString("rf.net.done") && aError==0) {
  63.     reminderFox_download_statustxt(aStatus,aError);
  64.     return;
  65. }
  66.  
  67.  switch(aError){
  68.  
  69.   case -2:
  70.     reminderFox_download_statutxt(aStatus,aError);
  71.     if (reminderFox_subscriptionCallback != null ) {
  72.         var statustxt = (aError)?    reminderFox_download_getErrorMsg(aError):aStatus;
  73.          reminderFox_subscriptionCallback (statustxt, 0  );
  74.     }    
  75.     return;
  76.     break;
  77.   case 0:
  78.   
  79.            reminderFox_logMessageLevel( "Downloading subscribed reminders...", REMINDER_FOX_LOG_LEVEL_FINE ); 
  80.            
  81.         if (reminderFox_subscriptionCallback != null ) {
  82.                reminderFox_subscriptionCallback ( reminderFox_getBundle().getString("rf.add.network.status.download.label"), 0  );
  83.         }
  84.           var processtime = 0;
  85.              if ( reminderFox_download_headless == REMINDER_FOX_UI_MODE_HEADLESS_SHOW_ALL_UI) {
  86.                     processtime = document.getElementById("processtime");
  87.                 }
  88.             var time=gDownloadService.time;
  89.             processtime.value=gDownloadService.length.toString()
  90.                               +" bytes  "+(time/1000).toString() + " sec  ";
  91.             var start=new Date();
  92.  
  93.             reminderFox_download_statustxt(reminderFox_getBundle().getString("rf.upload.process.label"),0);
  94.             try{
  95.                 reminderFox_download_statustxt(reminderFox_getBundle().getString("rf.download.importing.label"),0);
  96.             
  97.                 var is = Components.classes["@mozilla.org/io/string-input-stream;1"]
  98.                     .createInstance( Components.interfaces.nsIStringInputStream );
  99.                 is.setData(gDownloadService.data,-1); // -1 ... length should be computed
  100.                 
  101.             
  102.                 downloadedTodos = new Array();
  103.                 reminderFox_readInRemindersAndTodosICSFromStream(reminderFox_subscriptionReminders, downloadedTodos, is, true);
  104.                             
  105.                 // if successful, close immediately
  106.                  if ( window.arguments != null && window.arguments[0] != null && window.arguments[0].closeOnNoErrors == 1) {
  107.                       close();
  108.                       return;
  109.                   }
  110.     
  111.                 var end=new Date();
  112.                 processtime.value += ((end.getTime() - start.getTime())/1000).toString()+" sec";
  113.                 reminderFox_download_statustxt(reminderFox_getBundle().getString("rf.net.done"),0);
  114.                 
  115.                 if (reminderFox_subscriptionCallback != null ) {
  116.                        reminderFox_subscriptionCallback (null, 2, reminderFox_subscriptionReminders   );
  117.                 }                
  118.                 
  119.             }catch(e){
  120.               reminderFox_download_statustxt(e.toString(),0);
  121.               if(e && e.toString().match(/^rem\:(.+)$/))
  122.                 reminderFox_download_statustxt(RegExp.$1,0);
  123.               return;
  124.             }    
  125.       
  126.   
  127.     break;
  128.   default:
  129.     var status=aError % 0x804b0000;  
  130.    
  131.         reminderFox_download_statustxt(aStatus,aError);
  132.  
  133.         if (reminderFox_subscriptionCallback != null ) {
  134.             var statustxt = (aError)?    reminderFox_download_getErrorMsg(aError):aStatus;
  135.              reminderFox_subscriptionCallback (statustxt, 0  );
  136.         }            
  137.     break;
  138.    }
  139.   
  140.   if ( aError == 0 ) { 
  141.       if ( reminderFox_download_headless == REMINDER_FOX_UI_MODE_HEADLESS_SHOW_ALL_UI) {
  142.         reminderFox_closeWindow();
  143.         }
  144.   }
  145. }
  146.  
  147.  
  148.  
  149. function reminderFox_downloadDelayedStartup()
  150. {
  151.   var _downloadURL = "";
  152.   var _ioService = Components.classes["@mozilla.org/network/io-service;1"]
  153.                       .getService(Components.interfaces.nsIIOService);
  154.  
  155.   var proto = reminderFox_prefs.getCharPref(REMINDER_FOX_PREF + "." + REMINDER_FOX_PROTO);
  156.   var address = reminderFox_prefs.getCharPref(REMINDER_FOX_PREF + "." + REMINDER_FOX_ADDRESS);
  157.   var _username = reminderFox_prefs.getCharPref(REMINDER_FOX_PREF + "." + REMINDER_FOX_USERNAME);
  158.   
  159.   if ( address == null || address.length == 0 ) {
  160.         reminderFox_downloadCallback(reminderFox_getBundle().getString("rf.net.done"),-1);
  161.         return;
  162.   }
  163.   
  164.   var loginData = {
  165.     ljURL : proto + "://" + address,
  166.     username : _username,
  167.     password : ''
  168.   };
  169.  
  170.   loginData = reminderFox_getPassword(loginData);
  171.   
  172.  
  173.   // if no username is specified, allow to pass through
  174.   if ((_username != null && _username != "" ) && (loginData == null || loginData.password == null) ) {
  175.       // this is the end
  176.         reminderFox_downloadCallback(reminderFox_getBundle().getString("rf.upload.noPasswordSet.label"),3);
  177.         return;
  178.   }
  179.   
  180.   if ( loginData == null ) {
  181.     _downloadURL = proto + "://" + address;
  182.   }
  183.   else {
  184.       // uri-encode username and password
  185.       _username = encodeURIComponent( _username );
  186.       var _password = encodeURIComponent (loginData.password );
  187.       _downloadURL = proto + "://" + _username + ":" + _password + "@" + address;
  188.   }  
  189.   
  190.   
  191.   var downloadURI = _ioService.newURI(_downloadURL,null,null);
  192.   //statustxt("DEBUG VYPIS!",0);
  193.   
  194.   //gStartTime = new Date().getTime();
  195.  
  196.   if(gDownloadService.start(downloadURI,reminderFox_downloadCallback))
  197.     reminderFox_download_statustxt(reminderFox_getBundle().getString("rf.upload.request.label"),0);
  198.   else {
  199.     //statustxt(reminderFox_getBundle().getString("rf.net.done"),0);
  200.     reminderFox_downloadCallback(reminderFox_getBundle().getString("rf.net.done"),-1);
  201.   }
  202. }
  203.  
  204. function reminderFox_downloadCallback(aStatus,aError) {
  205.     if(aStatus != reminderFox_getBundle().getString("rf.net.done") && aError==0) {
  206.         reminderFox_download_statustxt(aStatus,aError);
  207.         return;
  208.     }
  209.  
  210.  
  211.   switch(aError){
  212.       case -2:
  213.         reminderFox_download_statustxt(aStatus,aError);
  214.         if (reminderFox_editWindowCallback != null ) {
  215.             var statustxt = (aError)?    reminderFox_download_getErrorMsg(aError):aStatus;
  216.              reminderFox_editWindowCallback (statustxt, -1  );
  217.         }    
  218.         return;
  219.         break;
  220.       case 0:
  221.           var remotetimestamp = reminderFox_getFileTimeStampFromString( gDownloadService.data );
  222.         var  lastRecordedLocalTimeStamp = reminderFox_prefs.getCharPref(REMINDER_FOX_PREF + "." + REMINDER_FOX_LAST_MODIFIED) + "";
  223.         
  224.         if ( remotetimestamp == -1 ) {
  225.             // when syncing with a remote calendaring service (such as memotoo.com) and not just with other ReminderFox
  226.             // instances, the remote file will not have the ReminderFox-last-modified timestamp.  In that case we will just assume
  227.             // that the remote file is the master list (by treating it as a newer timestamp) and download them.  
  228.             // This means on download, the remote always wins, so on upload you want to make sure that your local reminders
  229.             // are uploaded and current; otherwise the remote reminders will overwrite local changes the next download attempt.
  230.             remotetimestamp = new Date().getTime();
  231.             reminderFox_logMessageLevel( "Remote reminders have no timestamp; assume they are newer... ", REMINDER_FOX_LOG_LEVEL_FINE);        
  232.         }
  233.         
  234.         // if we are calling Download from the options, force it to download whether the remote reminders are newer or not...
  235.            if (window.arguments != null && window.arguments[0] != null && window.arguments[0].forceDownload == true) {           
  236.                    reminderFox_download_statustxt(aStatus,aError);
  237.                    lastRecordedLocalTimeStamp = -2;   // use  -2, as if there's no timestamp in the remote file, it comes back as -1.  So we need to be less than that value
  238.            }
  239.            
  240.           var done = false;
  241.            if ( remotetimestamp == lastRecordedLocalTimeStamp ) {
  242.               reminderFox_logMessageLevel("Remote and Local reminders are identical: " + remotetimestamp, REMINDER_FOX_LOG_LEVEL_FINE);
  243.               
  244.             if (reminderFox_editWindowCallback != null ) {
  245.                 reminderFox_editWindowCallback ( null, 1  );
  246.             }
  247.     
  248.               if ( reminderFox_download_headless == REMINDER_FOX_UI_MODE_HEADLESS_SHOW_ALL_UI ) {
  249.                   reminderFox_closeWindow();
  250.               }         
  251.             return;
  252.           }
  253.           else if ( remotetimestamp < lastRecordedLocalTimeStamp ) {
  254.                reminderFox_logMessageLevel("Local  reminders are newer than remote --  uploading local reminders... (local: " + lastRecordedLocalTimeStamp + ", remote: " + remotetimestamp + ")", REMINDER_FOX_LOG_LEVEL_FINE);
  255.                 reminderFox_logMessageLevel("Read timestamp from file (should be == to local): " + reminderFox_getFileTimeStamp(), REMINDER_FOX_LOG_LEVEL_FINE);
  256.             if (reminderFox_editWindowCallback != null ) {        
  257.                 reminderFox_editWindowCallback ( reminderFox_getBundle().getString("rf.add.network.status.upload.label"), 0  );
  258.             }
  259.               // don't upload if this was called from the options window...
  260.               if ( window.arguments != null && window.arguments[0] != null && window.arguments[0].closeOnNoErrors == 1) {  
  261.                      setTimeout(reminderFox_uploadReminders, 0);
  262.               }      
  263.               
  264.               if ( reminderFox_download_headless == REMINDER_FOX_UI_MODE_HEADLESS_SHOW_ERRORS ) {        
  265.                   reminderFox_upload_Startup_headless(REMINDER_FOX_UI_MODE_HEADLESS_SHOW_ERRORS );
  266.              }
  267.             if ( reminderFox_download_headless == REMINDER_FOX_UI_MODE_HEADLESS_SHOW_ALL_UI ) {
  268.                   setTimeout( reminderFox_closeWindow, 1 );
  269.               }
  270.               
  271.               if (reminderFox_editWindowCallback != null ) {        
  272.                 reminderFox_editWindowCallback (null, 1 );
  273.             }
  274.               
  275.             return;
  276.           }  
  277.           else if ( remotetimestamp > lastRecordedLocalTimeStamp ) {
  278.                reminderFox_logMessageLevel( "Remote reminders newer than local -- downloading remote reminders... (local: " + lastRecordedLocalTimeStamp + ", remote: " + remotetimestamp + ")", REMINDER_FOX_LOG_LEVEL_FINE);
  279.                reminderFox_logMessageLevel("Read timestamp from file (should be == to local): " + reminderFox_getFileTimeStamp(), REMINDER_FOX_LOG_LEVEL_FINE);
  280.     
  281.             if (reminderFox_editWindowCallback != null ) {
  282.                    reminderFox_editWindowCallback ( reminderFox_getBundle().getString("rf.add.network.status.download.label"), 0  );
  283.             }
  284.               var processtime = 0;
  285.                  if ( reminderFox_download_headless == REMINDER_FOX_UI_MODE_HEADLESS_SHOW_ALL_UI) {
  286.                         processtime = document.getElementById("processtime");
  287.                     }
  288.                 var time=gDownloadService.time;
  289.                 processtime.value=gDownloadService.length.toString()
  290.                                   +" bytes  "+(time/1000).toString() + " sec  ";
  291.                 var start=new Date();
  292.     
  293.                 reminderFox_download_statustxt(reminderFox_getBundle().getString("rf.upload.process.label"),0);
  294.                 try{
  295.                     reminderFox_download_statustxt(reminderFox_getBundle().getString("rf.download.importing.label"),0);
  296.                 
  297.                     var is = Components.classes["@mozilla.org/io/string-input-stream;1"]
  298.                         .createInstance( Components.interfaces.nsIStringInputStream );
  299.                     is.setData(gDownloadService.data,-1); // -1 ... length should be computed
  300.                     
  301.                     reminderEvents = new Array();
  302.                     reminderTodos = new Array();
  303.                     var originalExtraInfos = reminderFoxExtraInfo;
  304.                     reminderFox_readInRemindersAndTodosICSFromStream(reminderEvents, reminderTodos, is);
  305.         
  306.                     // check to see if any todos in remote file...
  307.                     var hasTodos = false;               
  308.                       for ( var n in reminderTodos ) {
  309.                         var reminderFoxTodos = reminderTodos[n];
  310.                         if (reminderFoxTodos.length > 0  ) {
  311.                             hasTodos = true;
  312.                             break;
  313.                         }          
  314.                       }
  315.                       
  316.                       // safety check: if there are no events and no todo's in the remote file, we will assume that this an error condition 
  317.                       // (this happens frequently with icalx.com where the remote file gets cleared) and will not overwrite the local reminders
  318.                     if ( reminderEvents.length == 0 && !hasTodos ) {                                            
  319.                           reminderFox_logMessageLevel( 
  320.                               "Failed: remote file with timestamp " + remotetimestamp + " has no events or todo's...", REMINDER_FOX_LOG_LEVEL_FINE);
  321.                               reminderFoxExtraInfo = originalExtraInfos;  // switch back to original extra info              
  322.                             // WE DON'T WANT TO OVERWRITE LOCAL IF NO REMOTE...                                
  323.                       }
  324.                       else {
  325.                           // Overwrite
  326.                         reminderFoxEvents = reminderEvents;
  327.                         reminderFoxTodosArray = reminderTodos;
  328.                         reminderFox_importRemindersUpdateAll(true, remotetimestamp);
  329.                       }                                        
  330.                                 
  331.                     // if successful, close immediately
  332.                      if ( window.arguments != null && window.arguments[0] != null && window.arguments[0].closeOnNoErrors == 1) {
  333.                           close();
  334.                           return;
  335.                       }
  336.         
  337.                     var end=new Date();
  338.                     processtime.value += ((end.getTime() - start.getTime())/1000).toString()+" sec";
  339.                     reminderFox_download_statustxt(reminderFox_getBundle().getString("rf.net.done"),0);
  340.                     
  341.                     if (reminderFox_editWindowCallback != null ) {
  342.                            reminderFox_editWindowCallback (null, 2  );
  343.                     }                
  344.                     
  345.                 }catch(e){
  346.                   reminderFox_download_statustxt(e.toString(),0);
  347.                   if(e && e.toString().match(/^rem\:(.+)$/))
  348.                     reminderFox_download_statustxt(RegExp.$1,0);
  349.                   return;
  350.                 }    
  351.           }
  352.       
  353.         break;
  354.       default:
  355.         var status=aError % 0x804b0000;  
  356.         if ( status == 22 ) {
  357.               reminderFox_logMessageLevel( "No remote file -- uploading local reminders...", REMINDER_FOX_LOG_LEVEL_FINE);
  358.     
  359.               // don't upload if this was called from the options window...
  360.               if ( window.arguments != null && window.arguments[0] != null && window.arguments[0].closeOnNoErrors == 1) {
  361.                     setTimeout(reminderFox_uploadReminders, 0);
  362.               }      
  363.               else if ( reminderFox_download_headless == REMINDER_FOX_UI_MODE_HEADLESS_SHOW_ERRORS ) {
  364.                  reminderFox_upload_Startup_headless(REMINDER_FOX_UI_MODE_HEADLESS_SHOW_ERRORS );
  365.              }
  366.             if ( reminderFox_download_headless == REMINDER_FOX_UI_MODE_HEADLESS_SHOW_ALL_UI ) {
  367.                   setTimeout( reminderFox_closeWindow, 1 );
  368.               }
  369.                if (reminderFox_editWindowCallback != null ) {        
  370.                 reminderFox_editWindowCallback (null, 1 );
  371.             }
  372.         }
  373.         else {
  374.               reminderFox_download_statustxt(aStatus,aError);
  375.             if (reminderFox_editWindowCallback != null ) {
  376.                 var statustxt = null;
  377.                 if (aError == -1) {
  378.                     statustxt = aStatus;
  379.                 }
  380.                 else {
  381.                     statustxt = (aError) ? reminderFox_download_getErrorMsg(aError) : aStatus;
  382.                 }
  383.                 
  384.                  reminderFox_editWindowCallback (statustxt, -1  );
  385.             }            
  386.             break;
  387.          }
  388.       }
  389.       if ( aError == 0 ) { 
  390.           if ( reminderFox_download_headless == REMINDER_FOX_UI_MODE_HEADLESS_SHOW_ALL_UI) {
  391.             reminderFox_closeWindow();
  392.             }
  393.       }
  394. }
  395.  
  396.  
  397. function reminderFox_closeWindow() {
  398.      if ( window.arguments != null && window.arguments[0] != null && window.arguments[0].closeOnNoErrors == 1) {
  399.           close();
  400.       }
  401.       else {
  402.            var reminderFox_download_button= document.getElementById("reminderFox_download_button");
  403.             reminderFox_download_button.setAttribute("label",reminderFox_getBundle().getString("rf.net.done"));     
  404.       }
  405. }
  406.  
  407.  
  408.  
  409.  
  410. function reminderFox_cancelDownload()
  411. {
  412.   gDownloadService.cancel();
  413.   close();
  414. }
  415.  
  416.  
  417. function reminderFox_download_getErrorMsg(aStatus)
  418. {
  419.   if(aStatus==0)
  420.     return "ok";
  421.  
  422.   var status=aStatus % 0x804b0000;
  423.   var error=reminderFox_getBundle().getString("rf.upload.unexpected.label");
  424.   switch(status)
  425.   {
  426.     case 1:
  427.       error=reminderFox_getBundle().getString("rf.upload.unexpected.label");
  428.       break;
  429.     case 2:
  430.       error=reminderFox_getBundle().getString("rf.upload.usercancel.label");
  431.       break;
  432.     case 3:
  433.       error=reminderFox_getBundle().getString("rf.upload.noPasswordSet.label");
  434.       break;
  435.     case 13:
  436.       error=reminderFox_getBundle().getString("rf.upload.refused.label");
  437.       break;
  438.     case 14:
  439.       error=reminderFox_getBundle().getString("rf.upload.netTimeout.label");
  440.       break;
  441.     case 16:
  442.       error=reminderFox_getBundle().getString("rf.upload.netOffline.label");
  443.       break;
  444.     case 21:
  445.       error=reminderFox_getBundle().getString("rf.upload.loginfailure.label");
  446.       break;
  447.     case 22:
  448.       error=reminderFox_getBundle().getString("rf.upload.ftpcwd.label");
  449.       break;
  450.     case 23:
  451.       error=reminderFox_getBundle().getString("rf.upload.ftppasv.label");
  452.       break;
  453.     case 24:
  454.       error=reminderFox_getBundle().getString("rf.upload.ftppwd.label");
  455.       break;
  456.     case 25:
  457.       error=reminderFox_getBundle().getString("rf.upload.ftplist.label");
  458.       break;
  459.     case 30:
  460.       error=reminderFox_getBundle().getString("rf.upload.unknown.label");
  461.       break;
  462.     case 201:
  463.       error=reminderFox_getBundle().getString("rf.upload.created.label");
  464.       break;
  465.     case 401:
  466.       error=reminderFox_getBundle().getString("rf.upload.loginfailure.label");
  467.       break;
  468.     case 405:
  469.       error=reminderFox_getBundle().getString("rf.upload.methodNotAllowed.label");
  470.       break;
  471.     default:
  472.       error=reminderFox_getBundle().getString("rf.upload.unexpected.label");
  473.       break;
  474.   }
  475.  
  476.   var formatted= (aStatus<0x804b0000)?
  477.           aStatus.toString(10) : "0x" + aStatus.toString(16).toUpperCase();
  478.   return error + " (" + formatted +")";
  479. }
  480.  
  481.  
  482.  
  483.  
  484.